home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / format / x400trc2rfc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  5.2 KB  |  228 lines

  1. /* x400trace2rfc: converts an x400 Trace struct into an RFC string as by RFC 1138 */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/format/RCS/x400trc2rfc.c,v 6.0 1991/12/18 20:22:06 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/format/RCS/x400trc2rfc.c,v 6.0 1991/12/18 20:22:06 jpo Rel $
  9.  *
  10.  * $Log: x400trc2rfc.c,v $
  11.  * Revision 6.0  1991/12/18  20:22:06  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include    "util.h"
  19. #include    "mta.h"
  20. #include    <isode/cmd_srch.h>
  21. #include    "tb_bpt88.h"
  22.  
  23. extern CMD_TABLE    bptbl_body_parts88 [/* body part types */];
  24. extern int    globalid2rfc();
  25. extern UTC    utclocalise();
  26. extern char *oid2lstr ();
  27.  
  28. static int bodypart2value (bodypart)
  29. char    *bodypart;
  30. {
  31.     int    ret;
  32.  
  33.     if (bodypart == NULLCP)
  34.         return NOTOK;
  35.     
  36.     switch (ret = cmd_srch (bodypart, bptbl_body_parts88)) {
  37.         case BPT_UNDEFINED:
  38.         case BPT_TLX:
  39.         case BPT_IA5:
  40.         case BPT_G3FAX:
  41.         case BPT_TIF0:
  42.         case BPT_TTX:
  43.         case BPT_VIDEOTEX:
  44.         case BPT_VOICE:
  45.         case BPT_SFD:
  46.         case BPT_TIF1:
  47.         return ret;
  48.         default:
  49.         if (strncmp (bodypart, "oid.", 4) == 0)
  50.             return BPT_EXTERNAL;
  51.         break;
  52.     }
  53.     return NOTOK;
  54. }
  55.  
  56. int x400eits2rfc (eits, buffer)
  57. EncodedIT *eits;
  58. char        *buffer;
  59. {
  60.     LIST_BPT    *ep;
  61.     
  62.     buffer[0] = '\0';
  63.  
  64.     for (ep = eits -> eit_types; ep; ep = ep -> li_next) {
  65.         switch (bodypart2value (ep -> li_name)) {
  66.             case BPT_UNDEFINED:
  67.             if (lexequ(ep -> li_name,
  68.                    rcmd_srch(BPT_UNDEFINED,
  69.                          bptbl_body_parts88)) == 0) {
  70.                 if ('\0' != buffer[0])
  71.                     (void) strcat (buffer, ",");
  72.                 (void) strcat(buffer, "undefined (0)");
  73.             }
  74.             break;
  75.             case BPT_TLX:
  76.             if ('\0' != buffer[0])
  77.                 (void) strcat (buffer, ",");
  78.             (void) strcat(buffer, "telex (1)");
  79.             break;
  80.  
  81.             case BPT_IA5:
  82.             if ('\0' != buffer[0])
  83.                 (void) strcat (buffer, ",");
  84.             (void) strcat(buffer, "ia5 text (2)");
  85.             break;
  86.  
  87.             case BPT_G3FAX:
  88.             if ('\0' != buffer[0])
  89.                 (void) strcat (buffer, ",");
  90.             (void) strcat(buffer, "g3 facsimile (3)");
  91.             break;
  92.  
  93.             case BPT_TIF0:
  94.             if ('\0' != buffer[0])
  95.                 (void) strcat (buffer, ",");
  96.             (void) strcat(buffer, "g4 class 1 (4)");
  97.             break;
  98.  
  99.             case BPT_TTX:
  100.             if ('\0' != buffer[0])
  101.                 (void) strcat (buffer, ",");
  102.             (void) strcat(buffer, "teletex (5)");
  103.             break;
  104.  
  105.             case BPT_VIDEOTEX:
  106.             if ('\0' != buffer[0])
  107.                 (void) strcat (buffer, ",");
  108.             (void) strcat(buffer, "videotex (6)");
  109.             break;
  110.  
  111.             case BPT_VOICE:
  112.             if ('\0' != buffer[0])
  113.                 (void) strcat (buffer, ",");
  114.             (void) strcat(buffer, "voice (7)");
  115.             break;
  116.  
  117.             case BPT_SFD:
  118.             if ('\0' != buffer[0])
  119.                 (void) strcat (buffer, ",");
  120.             (void) strcat(buffer, "sfd (8)");
  121.             break;
  122.             case BPT_TIF1:
  123.             if ('\0' != buffer[0])
  124.                 (void) strcat (buffer, ",");
  125.             (void) strcat(buffer, "mixed mode (9)");
  126.             break;
  127.             
  128.             case BPT_EXTERNAL:
  129.             /* oid */
  130.             if ('\0' != buffer[0])
  131.                 (void) strcat (buffer, ",");
  132.             (void) strcat(buffer, 
  133.                       oid2lstr(str2oid
  134.                            ((ep -> li_name + strlen("oid.")))));
  135.             break;
  136.  
  137.             default:
  138.             /* -- unregonised -- */
  139.             break;
  140.         }
  141.     }
  142.     return OK;
  143. }
  144.             
  145. int    x400trace2rfc (trace, buffer)
  146. Trace     *trace;
  147. char    *buffer;
  148. {
  149.     char    tbuf[LINESIZE], *cp;
  150.     UTC    lut;
  151.  
  152.     if (trace == (Trace *) NULL)
  153.         return DONE;
  154.      
  155.     (void) sprintf(cp = buffer, "by ");
  156.     cp += strlen (cp);
  157.  
  158.     if (trace->trace_mta != NULL) {
  159.         ap_val2str(tbuf, trace->trace_mta, AP_DOMAIN);
  160.         (void) sprintf(cp, "mta %s in ", tbuf);
  161.         cp += strlen(cp);
  162.     }
  163.     if (globalid2rfc(&trace -> trace_DomId, cp) == NOTOK)
  164.         return NOTOK;
  165.     cp += strlen(cp);
  166.  
  167.     (void) sprintf(cp, ";");
  168.     cp += strlen(cp);
  169.  
  170.     if (trace->trace_DomSinfo.dsi_deferred != NULLUTC) { 
  171.         if ((lut = utclocalise(trace->trace_DomSinfo.dsi_deferred)) != NULLUTC
  172.             && UTC2rfc (lut, tbuf) == OK) {
  173.             (void) sprintf (cp, " deferred until %s;", tbuf);
  174.             free ((char *) lut);
  175.             cp += strlen(cp);
  176.         }
  177.         else return NOTOK;
  178.     }
  179.  
  180.     if (trace->trace_DomSinfo.dsi_converted.eit_types != NULL) {
  181.         if (x400eits2rfc(&trace->trace_DomSinfo.dsi_converted,
  182.                  tbuf) == NOTOK)
  183.             return NOTOK;
  184.         if ('\0' != tbuf[0])
  185.             (void) sprintf(cp, " converted (%s);", tbuf);
  186.         cp += strlen(cp);
  187.     }
  188.  
  189.     if (trace->trace_DomSinfo.dsi_attempted_md.global_Country != NULLCP) {
  190.         (void) sprintf(cp, " attempted ");
  191.         cp += strlen(cp);
  192.         if (trace->trace_DomSinfo.dsi_attempted_mta != NULLCP) {
  193.             ap_val2str(trace->trace_DomSinfo.dsi_attempted_mta,
  194.                    tbuf, AP_DOMAIN);
  195.             (void) sprintf(cp, " mta %s in ", tbuf);
  196.             cp += strlen(cp);
  197.         }
  198.         if (globalid2rfc(&(trace->trace_DomSinfo.dsi_attempted_md),
  199.                  cp) == NOTOK)
  200.             return NOTOK;
  201.         cp += strlen(cp);
  202.         
  203.         (void) sprintf(cp, ";");
  204.         cp += strlen(cp);
  205.     }
  206.     if (trace->trace_DomSinfo.dsi_action ==  ACTION_RELAYED)
  207.         (void) sprintf(cp, " Relayed");
  208.  
  209.     else if (trace->trace_DomSinfo.dsi_action == ACTION_ROUTED)
  210.         (void) sprintf(cp, " Rerouted");
  211.  
  212.     cp += strlen(cp);
  213.  
  214.     if (trace->trace_DomSinfo.dsi_other_actions & ACTION_REDIRECTED)
  215.         (void) sprintf(cp, " Redirected");
  216.     if (trace->trace_DomSinfo.dsi_other_actions & ACTION_EXPANDED)
  217.         (void) sprintf(cp, " Expanded");
  218.     cp += strlen(cp);
  219.  
  220.     lut = utclocalise(trace->trace_DomSinfo.dsi_time);
  221.     if (UTC2rfc(lut, tbuf) == OK)
  222.         (void) sprintf(cp, "; %s", tbuf);
  223.     if (lut) free((char *) lut);
  224.  
  225.     PP_DBG (("Lib/x400trace2rfc returns (%s)", buffer));
  226.     return OK;
  227. }
  228.